/*
    思考+编码，用了1小时
    检查了 1 CLK
    然而，失败

    并且，我开始思考，对这种题目，如果不用这么明确的声明定义可能会更简单。
    毕竟这只是一个普通的测试题；
*/
#include "circlelist.h"

#include <malloc.h>
#include <stdlib.h>

void CircleListAppend(CircleList L,int n);

CircleList CircleListCreate(int N)
{
    CircleList list;

    list = (CircleList)malloc(sizeof(circlelist_node));
    if(NULL == list)
        return NULL;

    printf("circle list create success.\n");

    list->next = list;                  // 空循环链表，自己指向自己

    // 加入列表
    for(int i;i < N;i++)
        CircleListAppend(list,i);
    
    return list;
}

// *
P2CircleNode CircleListHeader(CircleList L)
{
    
}

static P2CircleNode CircleListLast(CircleList L)
{
    P2CircleNode pNode;

    if(NULL == L)
        return NULL;

    pNode = L->next;
    while(L != pNode->next)
    {
        pNode = pNode->next;
    }

    return pNode;
}

void CircleListAppend(CircleList L,int n)
{
    P2CircleNode pNode;
    P2CircleNode last;

    if(NULL == L)
        return;

    // malloc & insert to END —— which means Append
    pNode = (P2CircleNode)malloc(sizeof(circlelist_node));
    if(NULL == pNode)
        return;

    pNode->e = n;

    last = CircleListLast(L);       // 在L非NULL情况下，这个last一定有效
    pNode->next = last->next;
    last->next = pNode;
}

// move ...
void CircleListDelete(CircleList L,int m)
{
    P2CircleNode prev,tmp;
    int i;

    if(m < 1)                               // 你移动0个就属于逗我了...
    {
        printf("m could not be less 1.\n");
        return;
    }

    prev = L->next;

    while(L != L->next)
    {
        for(i = 0;i < m - 1;i++)                    // 考虑用一个简单方法找到前驱元，寻找到上一个位置
            prev = prev->next;

        // delete it
        tmp = prev->next;
        prev->next = tmp->next;
        free(tmp);
    }

    printf("last:%d\n",L->next->e);
}

int isCircleListLast(CircleList L)
{

}

// test-------------------------
void test_cricle_list(int N,int m)
{
    CircleList list;

    list = CircleListCreate(N);
    CircleListDelete(list,m);
}

// end of file ----------------------------------------------------------------
